import ast
# 返回 x 在 arr 中的索引，如果不存在返回 -1
#l：起始位置
#r：列表末尾下标
def binarySearch(arr, l, r, x):
    # 基本判断
    if r >= l:

        mid = int(l + (r - l) / 2) #确定每次查找都在选取列表中间位置

        # 元素整好的中间位置
        if arr[mid] == x:
            return mid

            # 元素小于中间位置的元素，只需要再比较左边的元素
        elif arr[mid] > x:
            return binarySearch(arr, l, mid - 1, x)#递归

            # 元素大于中间位置的元素，只需要再比较右边的元素
        else:
            return binarySearch(arr, mid + 1, r, x)

    else:
        # 不存在
        return -1


if __name__ == '__main__':
    #arr = [3,5,7,9,10,20,23]

    #python3.x 中 input() 函数接受一个标准输入数据，返回为 string 类型
    #使用input输入数据时，使用逗号隔开列表的每一项，再使用ast.literal_eval()方法转成列表即可
    arr = ast.literal_eval(input("需要查找的数组,使用逗号隔开:"))
    x = int(input("需要查找的值："))
    res = binarySearch(arr,0,len(arr)-1,x)
    if res == -1 :
        print("元素不在数组中")
    else:
        print("元素在数组中的索引为 %d" % res )